const RongIMLib = require('@rongcloud/imlib-next');
import * as util from '@/common/util.js';
// 初始化
function init() {
	// 应用初始化以获取 RongIMLib 实例对象，请务必保证此过程只被执行一次
	RongIMLib.init({
		appkey: 'pwe86ga5pnw76'
	});
}
// 注册消息类型
// const PersonMessage = RongIMLib.registerMessageType('card', true, true, [], false);

// 推出登录
function lougout() {
	RongIMLib.disconnect();
}



// 设置监听 初始化完成后，添加事件监听器，及时获取相关事件通知。
function addEventListener() {
	return new Promise(function(resolve, reject) {
		// 添加事件监听
		const Events = RongIMLib.Events

		// RongIMLib.addEventListener(Events.CONNECTING, () => {
		// 	console.log('正在链接服务器')
		// })

		// RongIMLib.addEventListener(Events.CONNECTED, () => {
		// 	console.log('已经链接到服务器')
		// })

		// RongIMLib.addEventListener(Events.MESSAGES, (evt) => {
		// 	console.log(evt.messages)
		// })

		RongIMLib.addEventListener(Events.CONVERSATION, (evt) => {
			resolve(evt)
			console.log(evt.messages)
		})

	})

}
// 链接IM
function connect(e) {
	RongIMLib.connect(e).then(res => {
		console.log(res);
		if (res.code === RongIMLib.ErrorCode.SUCCESS) {
			console.log('链接成功, 链接用户 id 为: ', res.data.userId);
		} else {
			console.warn('链接失败, code:', res.code)
		}
	})
}
// 获取会话列表
function getConversationList() {
	// 获取会话列表
	RongIMLib.getConversationList().then(({
		code,
		data: conversationList
	}) => {
		if (code === 0) {
			console.log('获取会话列表成功', conversationList);
		} else {
			console.log('获取会话列表失败: ', error.code, error.msg);
		}
	});
}
// 断开链接
function disconnect() {
	RongIMLib.disconnect().then(() => console.log('断开链接成功'));
}

// 群组发送消息
function sendmsg(id, content, e, a, type, applyid) {
	return new Promise(function(resolve, reject) {
		// 定义消息投送目标会话, 这里定义一个群组类型会话
		const conversation = {
			conversationType: a == 'PRIVATE' ? RongIMLib.ConversationType.PRIVATE : RongIMLib
				.ConversationType.GROUP,
			targetId: id
		}
		console.log(conversation, '545665466', a ? RongIMLib.ConversationType.a : RongIMLib.ConversationType
			.GROUP, a)
		// 实例化待发送消息，RongIMLib.TextMessage 为内置文本型消息
		const message = new RongIMLib.TextMessage({
			// 文本内容
			content: content,
			// （可选）消息中附加信息，透传到对端
			extra: JSON.stringify(e),
			type: type, // 1=交换微信卡片 2=拒绝交换 3=同意交换
			applyid: applyid, //申请交换微信的id
		})
		// 配置属性
		const options = {
			// 如果需要发送 @ 消息，isMentioned 需设置为 true
			isMentioned: true,
			// 消息发送前的回调，可以使用此回调返回的 message 用于列表渲染
			onSendBefore: (message) => {
				// console.log('消息发送前的回调', message)
			}
		}
		// 发送消息
		RongIMLib.sendMessage(conversation, message, options).then(res => {
			console.log(message, 'zhge1')
			if (res.code === RongIMLib.ErrorCode.SUCCESS) {
				resolve(res.data)
				// 消息发送成功，可以根据返回结果中的 messageId 字段将列表中的该消息状态改为发送成功。
				console.log('消息发送成功', res.data)
			} else {
				reject(res.code)
				console.log('消息发送失败', res.code, res.msg)
				if (res.code == 405) {
					uni.showToast({
						title: '您已被对方拉黑，暂无法发送消息',
						icon: "none"
					})
				}
			}
		})
	})
}
// 发送群组图片信息

// 发送图片
function sendimg(e, content, a) {
	return new Promise(function(resolve, reject) {
		// 定义消息投送目标会话, 这里定义一个群组类型会话
		const conversation = {
			conversationType: a ? RongIMLib.ConversationType.PRIVATE : RongIMLib.ConversationType.GROUP,
			targetId: e
		}

		util.addImg().then(data => {
			console.log(data)
			util.uploadFile(data).then(rest => {
				// 实例化待发送消息，RongIMLib.TextMessage 为内置文本型消息
				const message = new RongIMLib.ImageMessage({
					// 文本内容
					content: getbase(data),
					imageUri: rest.fullurl,
					// （可选）消息中附加信息，透传到对端
					extra: JSON.stringify(content)
				})
				// 发送消息
				RongIMLib.sendMessage(conversation, message).then(res => {
					if (res.code === RongIMLib.ErrorCode.SUCCESS) {
						// 消息发送成功，可以根据返回结果中的 messageId 字段将列表中的该消息状态改为发送成功。                      
						resolve(res.data)
						// console.log('消息发送成功', res.data)
					} else {
						console.log('消息发送失败', res.code, res.msg)
					}
				})

			})
		})
	})
}
// 图片转base64
function getbase(imgUrl) {
	uni.request({
		url: imgUrl,
		method: 'GET',
		responseType: 'arraybuffer',
		success: res => {
			let base64 = uni.arrayBufferToBase64(res.data); //把arraybuffer转成base64
			return 'data:image/jpeg;base64,' + base64; //不加上这串字符，在页面无法显示
			// console.log(base64);
		}
	});

}



// 获取历史消息
function getHistoryMessages(e, a) {
	return new Promise(function(resolve, reject) {
		const conversation = {
			conversationType: a == 'PRIVATE' ? RongIMLib.ConversationType.PRIVATE : RongIMLib
				.ConversationType.GROUP,
			targetId: e
		}

		// 从当前时间开始向前查询
		const option = {
			timestamp: 0,
			count: 20,
			order: 0
		}

		RongIMLib.getHistoryMessages(conversation, option).then(res => {
			if (res.code === 0) {
				console.log(res.data.list)
				console.log(res.data.hasMore)
				resolve(res.data.list)
			} else {
				console.log(res.code, res.msg)
			}
		})
	});

}

// 监听消息变化
function listener(e) {
	return new Promise(function(resolve, reject) {
		const Events = RongIMLib.Events
		const listener = (evt) => {
			resolve(evt.messages[0])
			const messageUId = evt.messages[0].messageUId;
			const timestamp = evt.messages[0].sentTime;

			RongIMLib.sendReadReceiptMessage(e, messageUId, timestamp).then(res => {
				if (res.code === 0) {

					console.log(res.code, res.data, '----------')
				} else {
					console.log(res.code, res.msg)
				}
			}).catch(error => {
				console.log(error)
			})
			console.log(evt.messages, '监听消息改变')
		};

		RongIMLib.addEventListener(Events.MESSAGES, listener)
	})
}
// 语音消息

function HQVoiceMessage(a, b, c, e, d) {
	return new Promise(function(resolve, reject) {
		const conversation = {
			conversationType: d ? RongIMLib.ConversationType.PRIVATE : RongIMLib.ConversationType.GROUP,
			targetId: e
		}
		const message = new RongIMLib.HQVoiceMessage({
			// 文本内容
			duration: a,
			remoteUrl: b,
			// （可选）消息中附加信息，透传到对端
			extra: JSON.stringify(c)
		})
		// 发送消息
		RongIMLib.sendMessage(conversation, message).then(res => {
			if (res.code === RongIMLib.ErrorCode.SUCCESS) {
				// 消息发送成功，可以根据返回结果中的 messageId 字段将列表中的该消息状态改为发送成功。                      
				resolve(res.data)
				console.log('消息发送成功', res.data)
			} else {
				console.log('消息发送失败', res.code, res.msg)
			}
		})
	})
}

function clear(e, a) {
	// 将某会话下所有未读消息已读上报
	const conversationType = a == 'PRIVATE' ? RongIMLib.ConversationType.PRIVATE : RongIMLib.ConversationType.GROUP;
	const targetId = e;

	RongIMLib.clearMessagesUnreadStatus({
		conversationType,
		targetId
	}).then(res => {
		if (res.code === 0) {
			console.log(res.code)
		} else {
			console.log(res.code, res.msg)
		}
	})
}


module.exports = {
	init,
	addEventListener,
	connect,
	getConversationList,
	disconnect,
	sendmsg,
	getHistoryMessages,
	sendimg,
	listener,
	HQVoiceMessage,
	clear,
	lougout
}